<html><head>
<title>Image load in unload handler</title>
<script>

var testCalled = false;

function test() {
    if (!testCalled) {
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }
        testCalled = true;
        return;
    }
    // We can't go to check-ping.php directly, since that doesn't start sending
    // a response until the ping data is detected, but unload handlers (where
    // we send the ping) are only run once we've begun receiving data from the
    // page being navigated to. Instead, we go through a dummy redirect page,
    // to make sure that the onunload handler has run before we get to 
    // check-ping.php.
    location.assign("resources/ping-redirect.html?test=unload-image");
}

function ping() {
    var img = new Image(1, 1);
    img.src = "resources/save-Ping.php?test=unload-image";
}

</script>
</head>
<body onload="test();" onunload="ping();">
<img src="resources/delete-ping.php?test=unload-image" onload="test();" onerror="test();"></img>
Test case for https://bugs.webkit.org/show_bug.cgi?id=30457. Previously, if an image<br>
load was trigger from an unload handler, we would kill it almost immediately due to the<br>
navigation stopping all loaders. These loads now happen entirely in the background and detached<br>
from the DOM, so they're invisible to the normal resource load callback infrastructure. We generate a<br>
timestamp, then in the unload handler, we load an 'image' (actually a php script) that takes the<br>
timestamp as a parameter and saves it to a file.  The destination page is a php script that checks for<br>
the existence of that file and passes the test if the file contains the expected timestamp.<br>
</body></html>
